package com.kamistoat.meimeimall.meimeimallcart.service;

import com.kamistoat.meimeimall.common.To.orderTo.OrderItemTo;
import com.kamistoat.meimeimall.common.To.wareTo.LockOrderItemWareTo;
import com.kamistoat.meimeimall.meimeimallcart.vo.CartVo;

import java.util.List;

public interface CartService {

    /**
     * 向购物城中添加商品
     *
     * @param skuId
     * @param num
     * @return
     */
    void addToCart(Long skuId, Integer num);

    /**
     * 查询刚刚成功添加的商品
     *
     * @param skuId
     * @param num
     * @return
     */
    OrderItemTo getCartItem(Long skuId, Integer num);

    /**
     * 获得购物车全部内容
     *
     * @return
     */
    CartVo getCart();

    /**
     * 获取<b>当前登录用户</b>缓存购物车下的所有购物商品列表
     *
     * @return 购物车商品列表
     */
    List<OrderItemTo> getCartItemToList();

    /**
     * 获取<b>指定用户</b>缓存购物车下的所有购物商品列表
     *
     * @param memberId 用户ID
     * @return
     */
    List<OrderItemTo> getCartItemToList(Long memberId);

    /**
     * 用于删除指定的cartKey购物车下的所有购物商品列表
     *
     * @param cartKey 购物车的key
     */
    void clearCart(String cartKey);

    /**
     * 勾选购物车商品向
     *
     * @param skuId
     * @param check
     */
    void checkItem(Long skuId, Integer check);

    /**
     * 修改购物商品项数量
     *
     * @param skuId
     * @param num
     */
    void countItem(Long skuId, Integer num);

    /**
     * 删除某个商品项
     *
     * @param skuId
     */
    void deleteItem(Long skuId);

    /**
     * 获取当前用户购物车中所有被选中的商品
     * 并不需要传入用户Id，因为购物车服务同样有拦截器的ThreadLocal，直接从里面那就可以了
     */
    List<OrderItemTo> getOrderCartChecked();

    /**
     * 从购车中删除当前订单中的商品
     *
     * @param lockOrderItemWareToList
     */
    void deleteOrderItemInCart(List<LockOrderItemWareTo> lockOrderItemWareToList);

    /**
     * 从购车中删除当前订单中的商品. 回滚动作
     *
     * @param lockOrderItemWareToList
     */
    void deleteOrderItemInCartRollback(List<LockOrderItemWareTo> lockOrderItemWareToList);
}
